package top.yangbuyi.config.shiro;

import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.util.StringUtils;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.apache.shiro.web.util.WebUtils;
import org.apache.zookeeper.Login;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.yangbuyi.constants.Constants;
import top.yangbuyi.utils.IdGeneratorSnowflake;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.Serializable;
import java.util.UUID;


/**
 * @description: 杨不易网站:www.yangbuyi.top
 * @program: yangbuyiopenHis2020
 * @ClassName: TokenWebSessionManager
 * @create: 2020-08-28 00:02
 * @author: yangbuyi
 * @since： JDK1.8
 * @TokenWebSessionManager: 进行token生成-鉴权redis当中的token是否一致$
 * 第一次请求一定是没有token的那么我们进行后端生成一个token给到前端
 * 第二次请求我们获取请求过来的token 判断是否与当前redis sessionid一致
 * 如果是非法请求那么将会判断一致性 从而返回对应的结果
 **/
@Configuration
@Slf4j
public class TokenWebSessionManager extends DefaultWebSessionManager {

	  @Override
	  protected Serializable getSessionId(ServletRequest request, ServletResponse response) {
			// 从请求头当中获取token 如果不存在就生成一个
			String header = WebUtils.toHttp(request).getHeader(Constants.TOKEN);
			log.debug("请求头令牌:{TokenWebSessionManager}" + header);
			if (StringUtils.hasText(header)) {
				  return header;
			}
			String token = UUID.randomUUID().toString();
			log.debug("重新生成令牌:{TokenWebSessionManager}" + token);
			return token;
	  }
}